//
//  StatusListViewModel.swift
//  WeoboWithSteveLi
//
//  Created by SteveLi on 2017/10/6.
//  Copyright © 2017年 李军桦. All rights reserved.
//

import Foundation
import SDWebImage
/// 微博数据列表模型 -- 封装网络方法
class StatusListViewModel {
    /// 微博数据数组 -- 上拉/下拉刷新
    lazy var statusList = [StatusViewModel]()
    /// 加载网络数据
    ///加载微博数据
    func loadStatus(isPullup: Bool, finished: @escaping(_ isSuccessed: Bool)->()) {
        //下拉刷新 -- 比数组中第一条微博大的id
        let since_id = isPullup ? 0 : (statusList.first?.status.id ?? 0)
        //上拉刷新 --数组中最后一条微博的id
        let max_id = isPullup ? (statusList.last?.status.id ?? 0) : 0
        
        NetworkTools.sharedTools.loadStatus(since_id: since_id, max_id: max_id) { (result, error) in
            if error != nil {
                print("出错了")
                finished(false)
                return
            }
            //判断result 的数据结构是否正确
            guard let array = (result as AnyObject)["statuses"] as? [[String: Any]] else{
                print("数据格式错误")
                finished(false)
                return
            }
            //遍历字典的数组，字典转模型
            //1.可变的数组
            var dataList = [StatusViewModel]()
            //2.遍历数组
            for dict in array {
                dataList.append(StatusViewModel(status: Status(dict: dict)))
            }
            print("刷新到\(dataList.count)条数据")
            //3.拼接数据 (数组合并可以使用’+‘号)
            //判断是否是上拉刷新
            if max_id > 0 {
                self.statusList += dataList
            } else {
                self.statusList = dataList + self.statusList
            }
      
            
            //4.缓存单张图片
            self.cacheSingleImage(dataList: dataList,finished: finished)
        }
    }
    
    ///缓存单张图片
     func cacheSingleImage(dataList: [StatusViewModel],finished: @escaping(_ isSuccessed: Bool)->()){
        //1.创建调度组
       // let groupp = DispatchGroup()
        //缓存数据长度
        var dataLength = 0
        //遍历视图模型数组
        for vm in dataList {
            //判断图片数量是否是单张图片
            if vm.thumbnailUrls?.count != 1 {
                continue
            }
            //获取url
            let url = vm.thumbnailUrls![0]
            print("开始缓存图像 \(url)")
            //SDWebImage - 下载图像(缓存是自动完成的)
                //groupp.enter()
            //SDWebImage 的核心下载函数，如果本地缓存已经存在，同样会通过完成回调返回
            SDWebImageManager.shared().loadImage(with: url as URL, options: [SDWebImageOptions.refreshCached,SDWebImageOptions.retryFailed], progress: nil, completed: { (image, _, _, _, _, _) in
                    //单张图片下载完成 计算长度
                if let img = image ,
                    let data = UIImagePNGRepresentation(img){
                    //累加二进制数据的长度
                   dataLength += data.count
                }
                //出组
               // groupp.leave()
            })
        }
        //3.监听调度组完成
        /*groupp.notify(queue: DispatchQueue.main) {
            print("缓存完成\(dataLength / 1024) K")
        }*/
        finished(true)
    }
 
}
